#include <stdio.h>
#include <stdlib.h>

int tmp[100];                            // 全局临时数组
void merge_sort(int str[], int l, int r) // l:起始位置r:结束位置
{
  if (l >= r) // 说明数组为空  //少一个等于号就无法输出
    return;
  int mid = (l + r) / 2;
  merge_sort(str, l, mid);
  merge_sort(str, mid + 1, r);

  int k = 0, i = l, j = mid + 1; // 接着，使用三个指针i、j和k分别指向两个子数组和临时数组的起始位置

  while (i <= mid && j <= r)
  {
    if (str[i] < str[j])
      tmp[k++] = str[i++];
    else
      tmp[k++] = str[j++];
  }
  while (i <= mid)
  {
    tmp[k++] = str[i++];
  }
  while (j <= r)
  {
    tmp[k++] = str[j++];
  }
  for (i = 0; i < k; i++)
  {
    str[l + i] = tmp[i];
  }
}
int main(int argc, char *argv[])
{
  int N, i;
  scanf("%d", &N);
  int str[100];

  for (i = 0; i < N; i++)
  {
    scanf("%d", &str[i]);
  }

  merge_sort(str, 0, N - 1);
  for (i = 0; i < N; i++)
  {
    printf("%d ", str[i]);
  }
  return 0;
}